package thread;

/**
 * @User: vitobo
 * @Date: 2024-07-31
 * @Description: wait等待 和 notify通知
 *
 * wait（）方法的执行过程：
 *     1.先释放锁
 *     2.进行阻塞等待
 *     3.收到通知之后，重新尝试获取锁，并且在获取锁后，继续往下执行；
 *
 *
 */
public class ThreadDemo16 {

    // 解决办法: wait()操作需要搭配synchronized使用；
    public static void main2(String[] args) throws InterruptedException {
        Object object = new Object();
        synchronized (object){
            System.out.println("wait 之前");

            // 实际上,这里的阻塞是 释放了锁, 此时其它线程是可以获取到object这个对象锁的;
            object.wait();
            System.out.println("wait 之后");
        }
    }

    // 非法的锁状态异常
    // object对象还没有加锁, 所以不能释放锁,
    public static void main1(String[] args) throws InterruptedException {
        Object object = new Object();

        // wait()不加任何参数, 就是死等,一直等待, 直到有其它线程唤醒它
        object.wait();
    }
}
